home *** CD-ROM | disk | FTP | other *** search
- /*
- File: LinkedList.h
-
- Contains: A linked list
- Written by: Steve Sisak
- Copyright: © 1995 by Steve Sisak, all rights reserved.
- */
-
- #ifndef _LINKEDLIST_
- #define _LINKEDLIST_
- #pragma once
-
- #include <Types.h>
-
- class ListLink;
- class LinkedListIterator;
-
- //--------------------------------------------------------------------------------
- class LinkedList
- {
- friend class LinkedListIterator;
- friend class ListLink;
-
- protected:
- // Assumptions:
- // (fFirstLink == nil) == (fLastLink == nil)
- // fListSize >= 0
-
- ListLink* fFirstLink; // first object in list
- ListLink* fLastLink; // last object on list
- LinkedListIterator* fIteratorList; // singly-linked list of iterators
- long fElementCount; // cached for convenience
-
- public:
- LinkedList(ListLink* first = nil, ListLink* last = nil);
- virtual ~LinkedList();
-
- inline ListLink* GetFirstLink() { return fFirstLink; }
- inline ListLink* GetLastLink() { return fLastLink; }
- inline long GetElementCount() { return fElementCount; }
- inline bool IsEmpty() { return fElementCount == 0; }
-
- virtual ListLink* GetNthLink(long index); // negative index from end
-
- virtual void AppendLink(ListLink& link);
- virtual void PrependLink(ListLink& link);
- virtual void InsertBefore(ListLink& link, ListLink& before);
- virtual void InsertAfter(ListLink& link, ListLink& after);
-
- virtual ListLink* RemoveFirstLink(void); // Useful for stack
- virtual ListLink* RemoveLastLink(void); // Useful for queue
- virtual void RemoveAllLinks(void); // Speed optimization
- virtual void RemoveLink(ListLink& link);
-
- virtual void LinkRemoved(ListLink& link);
- virtual void LinkInserted(ListLink& link);
-
- protected:
- virtual void InsertLink(ListLink& link, ListLink* after, ListLink* before);
- };
-
- #endif // _LINKEDLIST_
-